function noisy_signal = add_noise_to_signal(signal, snr_dB)
% add_noise_to_signal - 向信号添加高斯白噪声
%
% 输入参数:
%   signal  - 输入信号
%   snr_dB  - 信噪比(dB)
%
% 输出参数:
%   noisy_signal - 添加噪声后的信号

% 计算信号功率
signal_power = mean(abs(signal).^2);

% 将dB转换为线性尺度
snr_linear = 10^(snr_dB/10);

% 计算所需的噪声功率
noise_power = signal_power / snr_linear;

% 生成复高斯白噪声
noise = sqrt(noise_power/2) * (randn(size(signal)) + 1i*randn(size(signal)));

% 添加噪声
noisy_signal = signal + noise;

% 随机生成一些突发错误（模拟无线信道中的突发干扰）
burst_error_prob = 0.01;  % 突发错误概率
burst_length = 20;        % 突发错误长度

if rand < burst_error_prob
    % 随机选择突发错误的起始位置
    burst_start = randi([1, length(signal) - burst_length]);
    
    % 生成强度较大的突发噪声
    burst_noise = sqrt(10*noise_power) * (randn(1, burst_length) + 1i*randn(1, burst_length));
    
    % 添加突发噪声
    noisy_signal(burst_start:burst_start+burst_length-1) = signal(burst_start:burst_start+burst_length-1) + burst_noise;
end

end 